/**
 * 请你来实现一个 atoi 函数，使其能将字符串转换成整数。

首先，该函数会根据需要丢弃无用的开头空格字符，直到寻找到第一个非空格的字符为止。

当我们寻找到的第一个非空字符为正或者负号时，则将该符号与之后面尽可能多的连续数字组合起来，作为该整数的正负号；假如第一个非空字符是数字，则直接将其与之后连续的数字字符组合起来，形成整数。

该字符串除了有效的整数部分之后也可能会存在多余的字符，这些字符可以被忽略，它们对于函数不应该造成影响。

注意：假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时，则你的函数不需要进行转换。

在任何情况下，若函数不能进行有效的转换时，请返回 0。

说明：

假设我们的环境只能存储 32 位大小的有符号整数，那么其数值范围为 [−231,  231 − 1]。如果数值超过这个范围，请返回  INT_MAX (231 − 1) 或 INT_MIN (−231) 。

来
 */

/**
 * @param {string} str
 * @return {number}
 * 正则匹配
 * 1、去首尾控格
2、正则=>
    [] 一个中括号表达式
    ？ 匹配前面字表达式零次或一次，或指明一个非贪婪限定符
    \d 匹配一个数字字符 等价于 <=> [0-9]
    +  匹配前面的子表达式一次或多次 等价于 <=> {1,}
    RegExp(/^[+|-]?\d+/g);
    /^[+|-]?\d+/g
*/
var myAtoi = function (str) {
    if (!str) {
        return 0
    }
    str = str.trim()

    var reg = new RegExp(/^[+|-]?\d+/g);

    if (!reg.test(str)) {
        return 0
    }
    var num = str.match(reg)[0];

    var max = Math.pow(2, 31);
    if (num > max - 1) {
        return max - 1
    } else if (num < -max) {
        return -max
    }
    return num
};

/**
 * 判断一个整数是否是回文数。回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。
 * 输入: 121
输出: true

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
 */

var isPalindrome = function (x) {
    return x.toString() === x.toString().split('').reverse().join('')
};

/**
 * 给定 n 个非负整数 a1，a2，...，an，每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线，垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。

说明：你不能倾斜容器，且 n 的值至少为 2

 */

//双指针法
//两线段之间形成的区域总是受到其中较短那条长度的限制 && 两线段距离越远，得到面积越大
//设置首尾两个指针；每次遍历，将高度短的指针向中间靠拢，如果将长的指针向中间靠拢则面积一定缩小，但移动短但一端虽然长度减小但是有着遇到更高高度使得面积增加但可能性！
//时间复杂度:O(n),一次扫描
//空间复杂度:O(1)
var maxarea = 0;
var start = 0,
    end = height.length - 1;
while (start < end) {
    maxarea = Math.max(maxarea, Math.min(height[start], height[end]) * (end - start));
    if (height[start] >= height[end]) {
        end--;
    } else {
        start++;
    }
}
return maxarea;